Итак, в прошлом шаге мы с Вами считали данные из ресурсов. Как же MFC их находит. Создаем кнопку и код к ней.
void CTestAppDlg::OnButton5()
{
HINSTANCE hInst;
hInst = AfxGetResourceHandle();
if (hInst !=0)
{
if (FindResource(hInst,MAKEINTRESOURCE(IDC_CURSOR1),
RT_GROUP_CURSOR)!=NULL)
{
AfxMessageBox("Yes");
};
};
};
Есть функция AfxGetResourceHandle(), которая возвращает указатель
на ресурсы. Дальше используется функция FindResource() для поиска нужного
ресурса. Для этого передается указатель на ресурсы, строка имени ресурса, если у
нас строка числовая, то необходимо применить макрос MAKEINTRESOURCE,
который переведет числовое значение в строковое. Кроме того необходимо указать
группу ресурсов.
При запуске приложения MFC помещает в переменную afxCurrentResourceHandle указатель на ресурсы. Хотите посмотреть интересный ход. Вот измененый код кнопки.
void CTestAppDlg::OnButton5()
{
HINSTANCE hInst;
........
afxCurrentResourceHandle=NULL;
}
После нажатия на кнопку всякое ображение к функциям использующим ресурсы
приведет к аварийной остановке программы. Это круто !!! Мне кажется, что данная
переменная должна быть защищена от изменения, так как неосторожное обращение с
ней может привести к катастрофе приложения. Интересно это тоже так задумано ????
:-))) Сама переменная спрятана за макроподстановкой. #define afxCurrentResourceHandle AfxGetModuleState()->m_hCurrentResourceHandleПоэтому код можно поменять на следующий. Эффект тот же.
void CTestAppDlg::OnButton5()
{
........
//afxCurrentResourceHandle=NULL;
AfxGetModuleState()->m_hCurrentResourceHandle=NULL;
}